home *** CD-ROM | disk | FTP | other *** search
- // 0423-36-6862 taguchi
- #define MODULE_COPY
-
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <winb.h>
- #include <te.h>
- #include <fntb.h>
- #include <gui.h>
- #include <egb.h>
- #include <wgb.h>
- #include <msdos.cf>
- #include "art.h"
- #include "guisub.h"
- #include "wgbmac.H"
-
- #include "imagewin.h"
- #include "imgwin.h"
- #include "pensel.h"
- #include "colsel.h"
- #include "fifo.h"
- #include "subgrp.h"
- #include "desktop.h"
- #include "copy.h"
-
- int input_rectarea(IMWIN *win, EVENT *ev_first)
- // first:最初のマウス座標
- // type:0=矩形
- {
- imagewin_storeUndo(win);
- // クリップ枠の設定
- RM_setClipVisibleAllScr();
- RM_setOriginZero();
- // データ構造の初期化
- int type = 0;
- EVENT *ev = ev_first;
- POINT cp = *(POINT*)&ev->info; // 現在のカーソル位置
- POINT lastp = cp;
- FRAME frSrc; // コピー元領域を表す PIC 領域 (x,y,wid,ht)
- // コピー元を指定するイベントループ
- // 最初に指定された点が、コピー元の座標1
- POINT srcStartPt;
- imagewin_getPosFromMos(win, &cp, &srcStartPt);
- BOOL fFirst = TRUE;
- for (;;)
- {
- // カーソルの現在位置のオブジェクトID および IMWIN を得る
- int curobj = RM_getObjFromPoint(&cp);
- IMWIN* curwin = imagewin_getWinFromPart(curobj);
- // ラバー描画
- if (curwin == win && imagewin_PtInPic(curwin, &cp))
- {
- POINT p; imagewin_getPosFromMos(win,&cp,&p);
- FRAME fr;
- fr.X = _min(srcStartPt.x, p.x);
- fr.Y = _min(srcStartPt.y, p.y);
- fr.WID = abs(srcStartPt.x - p.x) + 1;
- fr.HT = abs(srcStartPt.y - p.y) + 1;
- imagewin_setBoxRubber(win, &fr);
- }
- else
- imagewin_clearBoxRubber(win);
- // 左ボタンがクリックされたら
- if (!fFirst && ev->what == EVMOSDN && (ev->shift & SLEFTBTN) != 0)
- {
- if (curwin == win && imagewin_PtInPic(win, &cp))
- {
- imagewin_clearBoxRubber(win);
- // コピー元領域が決定したので次にすすむ
- POINT p1;
- imagewin_getPosFromMos(win, &cp, &p1);
- if (p1.x < srcStartPt.x)
- SWAP_INT(p1.x, srcStartPt.x)
- if (p1.y < srcStartPt.y)
- SWAP_INT(p1.y, srcStartPt.y)
- frSrc.X = srcStartPt.x;
- frSrc.Y = srcStartPt.y;
- frSrc.WID = p1.x - srcStartPt.x + 1;
- frSrc.HT = p1.y - srcStartPt.y + 1;
- lastp = cp;
- break;
- }
- else if (curwin != NULL)
- MMI_ExecEvnt(ev);
- }
- // 右ボタンがクリックされたら終了
- else if (ev->what == EVMOSDN && (ev->shift & SRIGHTBTN) != 0)
- {
- imagewin_clearBoxRubber(win);
- goto ENDCOPY;
- }
- // イベントセンス
- do {
- MMI_iosense();
- } while (MMI_GetEvnt(EVALL, &ev) != NOERR);
- fFirst = FALSE;
- // イベント種別、シフト状態、マウス座標を得る
- cp = *(POINT *) &ev->info;
- }
- // コピー先を指定するイベントループ
- // コピー元のラバーを設定
- imagewin_setBoxRubber(win, &frSrc);
- fFirst = TRUE;
- IMWIN* rubberwin = NULL;
- for (;;)
- {
- // カーソルの現在位置のオブジェクトID および IMWIN を得る
- int curobj = RM_getObjFromPoint(&cp);
- IMWIN* curwin = imagewin_getWinFromPart(curobj);
- // ラバー描画
- if (curwin != NULL && imagewin_PtInPic(curwin, &cp))
- {
- POINT p; imagewin_getPosFromMos(curwin,&cp,&p);
- FRAME fr = {p.x, p.y, frSrc.WID, frSrc.HT};
- if (rubberwin != NULL && rubberwin != curwin)
- imagewin_clearBoxRubber2(rubberwin);
- imagewin_setBoxRubber2(curwin, &fr);
- rubberwin = curwin;
- }
- else if (rubberwin != NULL)
- {
- imagewin_clearBoxRubber2(rubberwin);
- rubberwin = NULL;
- }
- // 左ボタンがクリックされたら
- if (!fFirst && ev->what == EVMOSDN && (ev->shift & SLEFTBTN) != 0)
- {
- if (curwin != NULL && imagewin_PtInPic(curwin,&cp))
- {
- if (rubberwin != NULL)
- imagewin_clearBoxRubber2(rubberwin);
- imagewin_clearBoxRubber(win);
- POINT ptDest;
- imagewin_getPosFromMos(curwin, &cp, &ptDest);
- imagewin_copy(win,&frSrc,curwin,&ptDest);
- imagewin_setBoxRubber(win, &frSrc);
- }
- else if (curwin != NULL)
- MMI_ExecEvnt(ev);
- }
- // 右ボタンがクリックされたら終了
- else if (ev->what == EVMOSDN && (ev->shift & SRIGHTBTN) != 0)
- {
- if (rubberwin != NULL)
- imagewin_clearBoxRubber2(rubberwin);
- imagewin_clearBoxRubber(win);
- goto ENDCOPY;
- }
- // イベントセンス
- do {
- MMI_iosense();
- } while (MMI_GetEvnt(EVALL, &ev) != NOERR);
- fFirst = FALSE;
- // 現在のカーソル位置を得る
- cp = *(POINT *)&ev->info;
- }
- ENDCOPY:;
- // クリップ枠の復帰
- RM_recoverOrigin();
- RM_recoverClipVisible() ;
- // 次に続くイベントをキューに積む
- EVENT evbuf;
- evbuf = *ev;
- evbuf.what = EVMOSUP;
- evbuf.shift = (evbuf.shift & (~SRIGHTBTN)) | SLEFTBTN;
- MMI_SetEvnt(&evbuf);
- return NOERR ;
- }
-
- int cmd_rectzoomcopy(IMWIN *win, EVENT *ev_first)
- // first:最初のマウス座標
- // type:0=矩形
- {
- imagewin_storeUndo(win);
- // クリップ枠の設定
- RM_setClipVisibleAllScr();
- RM_setOriginZero();
- // データ構造の初期化
- int type = 0;
- EVENT *ev = ev_first;
- POINT cp = *(POINT*)&ev->info; // 現在のカーソル位置
- POINT lastp = cp;
- FRAME frSrc; // コピー元領域を表す PIC 領域 (x,y,wid,ht)
- // コピー元を指定するイベントループ
- // 最初に指定された点が、コピー元の座標1
- POINT srcStartPt;
- imagewin_getPosFromMos(win, &cp, &srcStartPt);
- BOOL fFirst = TRUE;
- for (;;)
- {
- // カーソルの現在位置のオブジェクトID および IMWIN を得る
- int curobj = RM_getObjFromPoint(&cp);
- IMWIN* curwin = imagewin_getWinFromPart(curobj);
- // ラバー描画
- if (curwin == win && imagewin_PtInPic(curwin, &cp))
- {
- POINT p; imagewin_getPosFromMos(win,&cp,&p);
- FRAME fr;
- fr.X = _min(srcStartPt.x, p.x);
- fr.Y = _min(srcStartPt.y, p.y);
- fr.WID = abs(srcStartPt.x - p.x) + 1;
- fr.HT = abs(srcStartPt.y - p.y) + 1;
- imagewin_setBoxRubber(win, &fr);
- }
- else
- imagewin_clearBoxRubber(win);
- // 左ボタンがクリックされたら
- if (!fFirst && ev->what == EVMOSDN && (ev->shift & SLEFTBTN) != 0)
- {
- if (curwin == win && imagewin_PtInPic(win, &cp))
- {
- imagewin_clearBoxRubber(win);
- // コピー元領域が決定したので次にすすむ
- POINT p1;
- imagewin_getPosFromMos(win, &cp, &p1);
- if (p1.x < srcStartPt.x)
- SWAP_INT(p1.x, srcStartPt.x)
- if (p1.y < srcStartPt.y)
- SWAP_INT(p1.y, srcStartPt.y)
- frSrc.X = srcStartPt.x;
- frSrc.Y = srcStartPt.y;
- frSrc.WID = p1.x - srcStartPt.x + 1;
- frSrc.HT = p1.y - srcStartPt.y + 1;
- lastp = cp;
- break;
- }
- else if (curwin != NULL)
- MMI_ExecEvnt(ev);
- }
- // 右ボタンがクリックされたら終了
- else if (ev->what == EVMOSDN && (ev->shift & SRIGHTBTN) != 0)
- {
- imagewin_clearBoxRubber(win);
- goto ENDCOPY;
- }
- // イベントセンス
- do {
- MMI_iosense();
- } while (MMI_GetEvnt(EVALL, &ev) != NOERR);
- fFirst = FALSE;
- // イベント種別、シフト状態、マウス座標を得る
- cp = *(POINT *) &ev->info;
- }
- // コピー先を指定するイベントループ
- // コピー元のラバーを設定
- imagewin_setBoxRubber(win, &frSrc);
-
- IMWIN* destWin = NULL;
- fFirst = TRUE;
- POINT destStartPt;
- for (;;)
- {
- // カーソルの現在位置のオブジェクトID および IMWIN を得る
- int curobj = RM_getObjFromPoint(&cp);
- IMWIN* curwin = imagewin_getWinFromPart(curobj);
- // ラバー描画
- if (curwin == destWin && imagewin_PtInPic(curwin, &cp))
- {
- POINT p; imagewin_getPosFromMos(destWin,&cp,&p);
- FRAME fr;
- fr.X = _min(destStartPt.x, p.x);
- fr.Y = _min(destStartPt.y, p.y);
- fr.WID = abs(destStartPt.x - p.x) + 1;
- fr.HT = abs(destStartPt.y - p.y) + 1;
- imagewin_setBoxRubber2(destWin, &fr);
- }
- else if (destWin != NULL)
- imagewin_clearBoxRubber2(destWin);
- // 左ボタンがクリックされたら
- if (!fFirst && ev->what == EVMOSDN && (ev->shift & SLEFTBTN) != 0)
- {
- if (destWin == NULL)
- // コピー先の始点が決定
- {
-
- }
-
-
- if (curwin == win && imagewin_PtInPic(win, &cp))
- {
- imagewin_clearBoxRubber(win);
- // コピー元領域が決定したので次にすすむ
- POINT p1;
- imagewin_getPosFromMos(win, &cp, &p1);
- if (p1.x < srcStartPt.x)
- SWAP_INT(p1.x, srcStartPt.x)
- if (p1.y < srcStartPt.y)
- SWAP_INT(p1.y, srcStartPt.y)
- frSrc.X = srcStartPt.x;
- frSrc.Y = srcStartPt.y;
- frSrc.WID = p1.x - srcStartPt.x + 1;
- frSrc.HT = p1.y - srcStartPt.y + 1;
- lastp = cp;
- break;
- }
- else if (curwin != NULL)
- MMI_ExecEvnt(ev);
- }
- // 右ボタンがクリックされたら終了
- else if (ev->what == EVMOSDN && (ev->shift & SRIGHTBTN) != 0)
- {
- imagewin_clearBoxRubber(win);
- goto ENDCOPY;
- }
- // イベントセンス
- do {
- MMI_iosense();
- } while (MMI_GetEvnt(EVALL, &ev) != NOERR);
- fFirst = FALSE;
- // イベント種別、シフト状態、マウス座標を得る
- cp = *(POINT *) &ev->info;
- }
-
-
-
- fFirst = TRUE;
- IMWIN* rubberwin = NULL;
- for (;;)
- {
- // カーソルの現在位置のオブジェクトID および IMWIN を得る
- int curobj = RM_getObjFromPoint(&cp);
- IMWIN* curwin = imagewin_getWinFromPart(curobj);
- // ラバー描画
- if (curwin != NULL && imagewin_PtInPic(curwin, &cp))
- {
- POINT p; imagewin_getPosFromMos(curwin,&cp,&p);
- FRAME fr = {p.x, p.y, frSrc.WID, frSrc.HT};
- if (rubberwin != NULL && rubberwin != curwin)
- imagewin_clearBoxRubber2(rubberwin);
- imagewin_setBoxRubber2(curwin, &fr);
- rubberwin = curwin;
- }
- else if (rubberwin != NULL)
- {
- imagewin_clearBoxRubber2(rubberwin);
- rubberwin = NULL;
- }
- // 左ボタンがクリックされたら
- if (!fFirst && ev->what == EVMOSDN && (ev->shift & SLEFTBTN) != 0)
- {
- if (curwin != NULL && imagewin_PtInPic(curwin,&cp))
- {
- if (rubberwin != NULL)
- imagewin_clearBoxRubber2(rubberwin);
- imagewin_clearBoxRubber(win);
- POINT ptDest;
- imagewin_getPosFromMos(curwin, &cp, &ptDest);
- imagewin_copy(win,&frSrc,curwin,&ptDest);
- imagewin_setBoxRubber(win, &frSrc);
- }
- else if (curwin != NULL)
- MMI_ExecEvnt(ev);
- }
- // 右ボタンがクリックされたら終了
- else if (ev->what == EVMOSDN && (ev->shift & SRIGHTBTN) != 0)
- {
- if (rubberwin != NULL)
- imagewin_clearBoxRubber2(rubberwin);
- imagewin_clearBoxRubber(win);
- goto ENDCOPY;
- }
- // イベントセンス
- do {
- MMI_iosense();
- } while (MMI_GetEvnt(EVALL, &ev) != NOERR);
- fFirst = FALSE;
- // 現在のカーソル位置を得る
- cp = *(POINT *)&ev->info;
- }
- ENDCOPY:;
- // クリップ枠の復帰
- RM_recoverOrigin();
- RM_recoverClipVisible() ;
- // 次に続くイベントをキューに積む
- EVENT evbuf;
- evbuf = *ev;
- evbuf.what = EVMOSUP;
- evbuf.shift = (evbuf.shift & (~SRIGHTBTN)) | SLEFTBTN;
- MMI_SetEvnt(&evbuf);
- return NOERR ;
- }
-
-
- int input_polygonarea(IMWIN *win, EVENT *ev_first)
- // first:最初のマウス座標
- // type:0=矩形
- {
- imagewin_storeUndo(win);
- // クリップ枠の設定
- RM_setClipVisibleAllScr();
- RM_setOriginZero();
- // データ構造の初期化
- int type = 0;
- EVENT *ev = ev_first;
- POINT cp = *(POINT*)&ev->info; // 現在のカーソル位置
- #define MAXPOINT 2000
- POINT *points = TL_calloc(sizeof(POINT), MAXPOINT);
- int nPoint = 0;
- if (points == NULL)
- goto ENDCOPY;
- POINT lastp = cp;
- POINT lastPicPt; imagewin_getPosFromMos(win, &lastp, &lastPicPt);
- FRAME frSrc = {lastPicPt.x,lastPicPt.y,lastPicPt.x,lastPicPt.y};
- AREA areaSrc = NULL;
- // 更新中は (x1,y1,x2,y2) 形式
- void updateFrSrc(POINT* pt)
- {
- frSrc.X = _min(frSrc.X, pt->x);
- frSrc.Y = _min(frSrc.Y, pt->y);
- frSrc.X2 = _max(frSrc.X2, pt->x);
- frSrc.Y2 = _max(frSrc.Y2, pt->y);
- }
- // 最初の点を座標配列に登録
- points[nPoint++] = lastPicPt;
- // コピー元を指定するイベントループ
- BOOL fFirst = TRUE;
- for (;;)
- {
- // カーソルの現在位置のオブジェクトID および IMWIN を得る
- int curobj = RM_getObjFromPoint(&cp);
- IMWIN* curwin = imagewin_getWinFromPart(curobj);
- // ラバー描画
- if (curwin == win && imagewin_PtInPic(curwin, &cp))
- {
- imagewin_resetLineRubber2(win);
- POINT p2;
- imagewin_getPosFromMos(win, &cp, &p2);
- imagewin_addLineRubber2(win, &lastPicPt, &p2);
- }
- else
- {
- imagewin_resetLineRubber2(win);
- imagewin_updateScr(win);
- }
- // 左ボタンがクリックされたら
- if (!fFirst && (ev->what == EVMOSDN || ev->what == EVMOSDRAG)
- && (ev->shift & SLEFTBTN) != 0)
- {
- if (curwin == win && imagewin_PtInPic(win, &cp))
- {
- imagewin_resetLineRubber2(win);
- // ラバー追加
- POINT p2;
- imagewin_getPosFromMos(win, &cp, &p2);
- imagewin_addLineRubber(win, &lastPicPt, &p2);
- updateFrSrc(&p2);
- points[nPoint++] = p2;
- lastPicPt = p2;
- lastp = cp;
- }
- else if (curwin != NULL)
- MMI_ExecEvnt(ev);
- }
- // 右ボタンがクリックされたら終了
- else if (ev->what == EVMOSDN && (ev->shift & SRIGHTBTN) != 0)
- {
- imagewin_resetLineRubber2(win);
- if (imagewin_nLineRubber(win) >= 2)
- {
- // ラバー追加
- imagewin_addLineRubber(win, &lastPicPt, NULL);
- imagewin_updateScr(win);
- break;
- }
- else
- {
- imagewin_resetLineRubber(win);
- imagewin_updateScr(win);
- goto ENDCOPY;
- }
- }
- // イベントセンス
- do {
- MMI_iosense();
- } while (MMI_GetEvnt(EVALL, &ev) != NOERR);
- fFirst = FALSE;
- // イベント種別、シフト状態、マウス座標を得る
- cp = *(POINT *) &ev->info;
- }
- // frSrc を (x,y,wid,ht) 形式に変更
- SortRect((Rect*)&frSrc);
- frSrc.WID = frSrc.X2 - frSrc.X + 1;
- frSrc.HT = frSrc.Y2 - frSrc.Y + 1;
- // areaSrc を作成
- areaSrc = area_new(frSrc.X, frSrc.Y, frSrc.WID, frSrc.HT);
- if (areaSrc == NULL)
- goto ENDCOPY;
- area_polygon(areaSrc, points, nPoint);
- // コピー先を指定するイベントループ
- fFirst = TRUE;
- IMWIN* rubberwin = NULL;
- for (;;)
- {
- // カーソルの現在位置のオブジェクトID および IMWIN を得る
- int curobj = RM_getObjFromPoint(&cp);
- IMWIN* curwin = imagewin_getWinFromPart(curobj);
- // ラバー描画
- if (curwin != NULL && imagewin_PtInPic(curwin, &cp))
- {
- POINT p; imagewin_getPosFromMos(curwin,&cp,&p);
- FRAME fr = {p.x, p.y, frSrc.WID, frSrc.HT};
- if (rubberwin != NULL && rubberwin != curwin)
- imagewin_clearBoxRubber2(rubberwin);
- imagewin_setBoxRubber2(curwin, &fr);
- rubberwin = curwin;
- }
- else if (rubberwin != NULL)
- {
- imagewin_clearBoxRubber2(rubberwin);
- rubberwin = NULL;
- }
- // 左ボタンがクリックされたら
- if (!fFirst && ev->what == EVMOSDN && (ev->shift & SLEFTBTN) != 0)
- {
- if (curwin != NULL && imagewin_PtInPic(curwin,&cp))
- {
- if (rubberwin != NULL)
- imagewin_clearBoxRubber2(rubberwin);
- POINT ptDest;
- imagewin_getPosFromMos(curwin, &cp, &ptDest);
- imagewin_copyarea(win, areaSrc, curwin, &ptDest);
- }
- else if (curwin != NULL)
- MMI_ExecEvnt(ev);
- }
- // 右ボタンがクリックされたら終了
- else if (!fFirst && ev->what==EVMOSDN && (ev->shift & SRIGHTBTN) != 0)
- {
- if (rubberwin != NULL)
- imagewin_clearBoxRubber2(rubberwin);
- break;
- }
- // イベントセンス
- do {
- MMI_iosense();
- } while (MMI_GetEvnt(EVALL, &ev) != NOERR);
- fFirst = FALSE;
- // 現在のカーソル位置を得る
- cp = *(POINT *)&ev->info;
- }
- ENDCOPY:;
- imagewin_resetLineRubber(win);
- imagewin_updateScr(win);
- if (areaSrc != NULL)
- area_delete(areaSrc);
- if (points != NULL)
- TL_free(points);
- // クリップ枠の復帰
- RM_recoverOrigin();
- RM_recoverClipVisible() ;
- // 次に続くイベントをキューに積む
- EVENT evbuf;
- evbuf = *ev;
- evbuf.what = EVMOSUP;
- evbuf.shift = (evbuf.shift & (~SRIGHTBTN)) | SLEFTBTN;
- MMI_SetEvnt(&evbuf);
- return NOERR ;
- }
-
- int cmd_polygonfill(IMWIN *win, EVENT *ev_first)
- // first:最初のマウス座標
- // type:0=矩形
- {
- imagewin_storeUndo(win);
- // クリップ枠の設定
- RM_setClipVisibleAllScr();
- RM_setOriginZero();
- // データ構造の初期化
- int type = 0;
- EVENT *ev = ev_first;
- POINT cp = *(POINT*)&ev->info; // 現在のカーソル位置
- #define MAXPOINT 2000
- POINT *points = TL_calloc(sizeof(POINT), MAXPOINT);
- int nPoint = 0;
- if (points == NULL)
- goto ENDCOPY;
- POINT lastp = cp;
- POINT lastPicPt; imagewin_getPosFromMos(win, &lastp, &lastPicPt);
- FRAME frSrc = {lastPicPt.x,lastPicPt.y,lastPicPt.x,lastPicPt.y};
- AREA areaSrc = NULL;
- // 更新中は (x1,y1,x2,y2) 形式
- void updateFrSrc(POINT* pt)
- {
- frSrc.X = _min(frSrc.X, pt->x);
- frSrc.Y = _min(frSrc.Y, pt->y);
- frSrc.X2 = _max(frSrc.X2, pt->x);
- frSrc.Y2 = _max(frSrc.Y2, pt->y);
- }
- // 最初の点を座標配列に登録
- points[nPoint++] = lastPicPt;
- // コピー元を指定するイベントループ
- BOOL fFirst = TRUE;
- for (;;)
- {
- // カーソルの現在位置のオブジェクトID および IMWIN を得る
- int curobj = RM_getObjFromPoint(&cp);
- IMWIN* curwin = imagewin_getWinFromPart(curobj);
- // ラバー描画
- if (curwin == win && imagewin_PtInPic(curwin, &cp))
- {
- imagewin_resetLineRubber2(win);
- POINT p2;
- imagewin_getPosFromMos(win, &cp, &p2);
- imagewin_addLineRubber2(win, &lastPicPt, &p2);
- }
- else
- {
- imagewin_resetLineRubber2(win);
- imagewin_updateScr(win);
- }
- // 左ボタンがクリックされたら
- if (!fFirst && (ev->what == EVMOSDN || ev->what == EVMOSDRAG)
- && (ev->shift & SLEFTBTN) != 0)
- {
- if (curwin == win && imagewin_PtInPic(win, &cp))
- {
- imagewin_resetLineRubber2(win);
- // ラバー追加
- POINT p2;
- imagewin_getPosFromMos(win, &cp, &p2);
- imagewin_addLineRubber(win, &lastPicPt, &p2);
- updateFrSrc(&p2);
- points[nPoint++] = p2;
- lastPicPt = p2;
- lastp = cp;
- }
- else if (curwin != NULL)
- MMI_ExecEvnt(ev);
- }
- // 右ボタンがクリックされたら終了
- else if (ev->what == EVMOSDN && (ev->shift & SRIGHTBTN) != 0)
- {
- imagewin_resetLineRubber2(win);
- if (imagewin_nLineRubber(win) >= 2)
- {
- // ラバー追加
- imagewin_addLineRubber(win, &lastPicPt, NULL);
- imagewin_updateScr(win);
- break;
- }
- else
- {
- imagewin_resetLineRubber(win);
- imagewin_updateScr(win);
- goto ENDCOPY;
- }
- }
- // イベントセンス
- do {
- MMI_iosense();
- } while (MMI_GetEvnt(EVALL, &ev) != NOERR);
- fFirst = FALSE;
- // イベント種別、シフト状態、マウス座標を得る
- cp = *(POINT *) &ev->info;
- }
- imagewin_clearLineRubber(win);
- // frSrc を (x,y,wid,ht) 形式に変更
- SortRect((Rect*)&frSrc);
- frSrc.WID = frSrc.X2 - frSrc.X + 1;
- frSrc.HT = frSrc.Y2 - frSrc.Y + 1;
- // areaSrc を作成
- areaSrc = area_new(frSrc.X, frSrc.Y, frSrc.WID, frSrc.HT);
- if (areaSrc == NULL)
- goto ENDCOPY;
- area_polygon(areaSrc, points, nPoint);
- // 領域塗りつぶし
- PIXEL pix;
- colsel_getPixel(&pix);
- pic_beginUpDate(win->pic);
- pic_fillarea(win->pic, areaSrc, &pix);
- FRAME frUpdate;
- pic_endUpDate(win->pic, &frUpdate);
- imagewin_updateScrPart(win, &frUpdate);
- ENDCOPY:;
- imagewin_resetLineRubber(win);
- imagewin_updateScr(win);
- if (areaSrc != NULL)
- area_delete(areaSrc);
- if (points != NULL)
- TL_free(points);
- // クリップ枠の復帰
- RM_recoverOrigin();
- RM_recoverClipVisible() ;
- // 次に続くイベントをキューに積む
- EVENT evbuf;
- evbuf = *ev;
- evbuf.what = EVMOSUP;
- evbuf.shift = (evbuf.shift & (~SRIGHTBTN)) | SLEFTBTN;
- MMI_SetEvnt(&evbuf);
- return NOERR ;
- }
-